package thread.sisuo;

import thread.synchronizedtest.ThreadA;

import java.security.AccessControlContext;

public class Client {

/**
 *  会出现抱死现象
 *   我给丹妮转账 同时 丹妮给我转账
 *   对传递对象进行加锁    我的账户被锁住  她的账户也被锁住  进行转账
 *   同时发生  的情况下  我的被锁住  给她转   她的被锁住
 *   她给我转  她的被锁住想要锁我    可是我的已经被锁住   而我的释放需要她 先释放自己的锁   因此出现抱死现象
 **/
    public static void  main(String[] args){

       final Account accountFrom = new Account();
       final Account accountTo = new Account();


       final Account transferMoneyA =  new Account();
       transferMoneyA.setMoney(20);
       final Account transferMoneyB =  new Account();
       transferMoneyB.setMoney(30);

       final WuXuSuo wuXuSuo  = new WuXuSuo();
       Runnable runnableA   = new Runnable() {
           @Override
           public void run() {
               try {
                   wuXuSuo.transferMoney(accountFrom,accountTo,transferMoneyA);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
       };

        Runnable runnableB  = new Runnable() {
            @Override
            public void run() {
                try {
                    wuXuSuo.transferMoney(accountTo,accountFrom,transferMoneyB);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };


        Thread  threadA = new Thread(runnableA);
        Thread threadB = new Thread(runnableB);

        threadA.start();
        threadB.start();
    }
}
